package icasue.net.protocol.carfun.commands;


import icasue.net.protocol.carfun.common.Const;

/**
 * @Author: Qiao Hang
 * @CreateDate: 2021/3/18 下午3:14
 * @UpdateDate:
 * @Description: Command为CarFunProtocol交互命令的抽象，涵盖:
 *  1.MDCommand 为客户端通知服务端改变客户端行为/状态.
 *  2.EventCommand 为服务端改变客户端的行为/状态后生成的事件，该事件会被选择性的通知到同一channel下的客户端实例.
 */
public interface Command {

    /**
     * Get command Name.
     * 协议解析Command会调用该方法，
     * 建议用户自定义的Command均为Enum，
     * 否则需要重写getCommand()方法，以及CommandDriver(不建议)
     * @return
     */
    default String getCommand() {
        if(this.getClass().isEnum()){
            return Enum.class.cast(this).name();
        }
        return Const.DEFAULT_COMMAND_NAME;
    };

}
